home *** CD-ROM | disk | FTP | other *** search
Wrap
OPERATOR OVERLOADING _________________________________________________________________________ In C++, you can use the 'operator' keyword to overload normal C operators to perform basic functions like adding and subtracting the way you would normally, by using the '+' and '-' symbols. Thus, instead of creating a function to do something like this: Vector = myAddTwoVectors( Vector1, Vector2 ); you would overload the '+' operator so that the above statement would look like this: Vector = Vector1 + Vector2; The mechanics for operator overloading are shown in the following code segment: // vector.cp #include <iostream.h> class Vector { // friend needed to overload ios operators friend ostream &operator<<( ostream &os, const Vector &V ); // note that implicit 'this' object not sent to friend // function outside scope of class public: // default constructor Vector(){ x=0; y=0; } // inline // shorthand assignment constructor Vector( const float a, const float b ) : x(a), y(b) {} // overload operators Vector operator+( const Vector &V ); Vector &operator+=( Vector &V ); Vector &operator=( Vector &V ); Vector &operator++(); // prefix Vector operator++( int ); // postfix - requires dummy argument private: float x; float y; }; Vector Vector::operator+( const Vector &V ) { return Vector( x + V.x, y + V.y ); } Vector &Vector::operator+=( Vector &V ) { x = x + V.x; y = y + V.y; return *this; } Vector &Vector::operator=( Vector &V ) { // no different than default operator, but could be x = V.x; y = V.y; return *this; } Vector &Vector::operator++() { ++x; ++y; return *this; } Vector Vector::operator++( int ) { Vector V; V = *this; x++; y++; return V; } ostream &operator<<( ostream &os, const Vector &V ) { return os << "Vector[ " << V.x << ", " << V.y << " ]"; } main() { Vector vectorA( 3, 4 ); Vector vectorB( 2, 7 ); // output line 1 cout << vectorA << " + " << vectorA << " = "; vectorA += vectorA; cout << vectorA << endl; // output line 2 cout << vectorA << " + " << vectorB << " = " << vectorA + vectorB << endl; // output line 3 vectorA = vectorB; cout << vectorA << endl; // output line 4 cout << ++vectorA << endl; return 0; } // end vector.cp